package pos.domain;

import java.util.ArrayList;
import java.util.List;
import pos.data.JDBCRutaDAO;

public class RutaProcessor implements IRutaProcessor{
	
	private static RutaProcessor instance;
	private JDBCRutaDAO rutaDao;
	
	public RutaProcessor() {
		super();
		rutaDao = new JDBCRutaDAO();
	}

	public static synchronized RutaProcessor getInstance() {
        if (instance == null)
        	instance = new RutaProcessor();
        return instance;
    }

	@Override
	public List<Ruta> getRutas(Usuario usuario) {
		List<Ruta> lista = rutaDao.selectByUser(usuario);
		return lista;	
	}

	@Override
	public List<Calle> generarRuta(Ruta ruta) {
		List<Calle> lista = new ArrayList<Calle>();
		Calle calleInicio = ruta.getCalleInicio();
		Calle calleFin = ruta.getCalleFin();
		RutaAleatoria rutaAleatorio = new RutaAleatoria(calleInicio, calleFin);
		lista = rutaAleatorio.getListaRuta();
		return lista;
	}

	@Override
	public void guardarRuta(Ruta ruta) {
		rutaDao.insert(ruta);
	}

	@Override
	public Ruta getRuta(int idRuta) {
		return rutaDao.selectById(idRuta);
	}

	@Override
	public boolean estacionesValidas(int numInicio, int numFin, Ruta ruta) {
		boolean valido = false;
		int ordenInicio = 0;
		int ordenFinal= 0;
		int i=1;
		for(Calle c:ruta.getCalles()){
			for(Estacion e:c.getEstaciones()){
				if(e.getNumero()==numInicio && ordenInicio==0){
					ordenInicio = i;
				}
				if(e.getNumero()==numFin && ordenFinal==0){
					ordenFinal = i;
				}
				if(ordenInicio!=0 && ordenFinal!=0){
					break;
				}
			}
			i++;
		}
		if((ordenInicio<ordenFinal) && ordenInicio!=0 && ordenFinal!=0){
			valido = true;
		}
		return valido;
	}
}
